﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL;
using BOL;
using UtilityExtensions;
using Website.Logger;
using System.Data.SqlClient;

namespace UILGestion.Control
{
    public partial class OrdenAnticipoPanel : System.Web.UI.UserControl
    {

        public OrdenAnticipoInfo OrdenAnticipoInfo { 
            get
            {
                
                OrdenAnticipoInfo orden= new OrdenAnticipoInfo();
                
                orden.descripcion=descripcionTxt.Text;
                orden.fecha=fechaTextBox.Text.ToDate().Value;
                orden.porcentaje=porcentajeTxt.Text.ToDecimal().Value;
                orden.total=totalTxt.Text.ToDecimal().Value;
                
                return orden;

            } 
        
        }

        public OrdenAnticipoPanel()
        {
            bol = new OrdenCompraBL();
        }

        private OrdenCompraBL bol;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
            
            FormatForm();
            }
        }
        private void FormatForm()
        {

        }
        public void Load(OrdenCompra orden)
        {
            this.idOrden.Value = orden.idObra.ToString();
            fechaTextBox.Text = DateTime.Now.ToShortDateString();
            IGVCheckBox.Checked = orden.Obra.incluyeIGV.Value;
            descripcionTxt.Text = "";
            numerolbl.Text = orden.numDocumento;
            proveedorLabel.Text=orden.proveedor;

                

            var totalAnticipo = orden.OrdenAnticipos.Sum(p => p.totalAnticipo);
            if (totalAnticipo.IsNull())
                        totalAnticipo = 0;
            
            decimal totalComparar=orden.GetTotalComparar();
            decimal totalDisponible = totalComparar - totalAnticipo;

            totalDisponiblelbl.Text=totalDisponible.ToString("N4");
            porcDisponiblelbl.Text = Math.Round((totalDisponible * 100 / totalComparar),2).ToString();
            totalTxt.Text = totalDisponible.ToString();
            
            IGVvalorLabel.Text = (orden.igv.Value*100).ToString("N0");
            porcentajeTxt.Text = "100.00";

            SetEstadistica();

        }

        public void SetEstadistica()
        {

                decimal total=totalTxt.Text.ToDecimal().Value;
    
                if (!IGVCheckBox.Checked)
                {
                    subTotalTextBox.Text=total.ToString("N2");
                    totalLabel.Text = (subTotalTextBox.Text.ToDecimal().Value*(1+IGVvalorLabel.Text.ToDecimal().Value/100)).ToString("N");
                    IGVLabel.Text = (totalLabel.Text.ToDecimal().Value - subTotalTextBox.Text.ToDecimal().Value).ToString("N");
                }
                else
                {
                    totalLabel.Text = total.ToString("N2");
                    subTotalTextBox.Text=(total/(1+IGVvalorLabel.Text.ToDecimal().Value)/100).ToString("N2");
                    IGVLabel.Text=  (total-subTotalTextBox.Text.ToDecimal().Value).ToString("N2");
                }

                
            
        }

        protected void calcular(object sender, EventArgs e)
        {
            if (porcentajeTxt.Text.ToDecimal()!=null)
            {
                if (Math.Round(porcentajeTxt.Text.ToDecimal().Value, 2) >100)
                {
                    throw new Exception("Ingrese porcentaje menores al Disponible");
                }

                totalTxt.Text=(Math.Round(totalDisponiblelbl.Text.ToDecimal().Value *
                            (porcentajeTxt.Text.ToDecimal().Value/100),4)).ToString();

                // de acuerdo al calculado se actualiza los totales
                SetEstadistica();
                PanelAnticipoPanel.Update();
            }
            

        }

        protected void calculart(object sender, EventArgs e)
        {
            try
            {


            
            if (totalTxt.Text.ToDecimal() != null)
            {

                if (Math.Round(totalTxt.Text.ToDecimal().Value,2) > Math.Round(totalDisponiblelbl.Text.ToDecimal().Value,2))
                {
                    throw new Exception("Ingrese montos menores al Disponible");
                }

                porcentajeTxt.Text =(Math.Round ((totalTxt.Text.ToDecimal().Value * 100 / 
                                            totalDisponiblelbl.Text.ToDecimal().Value),2)).ToString();

                SetEstadistica();
                PanelAnticipoPanel.Update();
            }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
 
            

        }
    }
}